#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include "libuser.h"
#include "user.h"
int main(int argc,char **argv) {

    // 开启宿主机声卡设备文件服务
    // sudo modprobe snd_pcm_oss
    // ffmpeg转码采样率设为20000
    // ffmpeg -i 夜曲.mp3 -ar 20000 yequ10s.wav
    
    int p = do_fork();
    if (p == 0) {
        // 子进程再开一个用来计算的子进程
        if (do_fork() == 0) {
            do_print("app_sound: process %d begin\n", do_getpid());
            long long x; for (int i = 1; i <= 0x3ffffff; i++) x += i;
            do_print("1 add to 0x3ffffff is %p\n", x);
            do_print("app_sound: process %d end\n", do_getpid());
            return 0;
        }
    }
    do_print("app_sound: process %d begin\n", do_getpid());
    
    // 打开设备文件
    int fd = do_open("/dev/dsp", O_RDWR);
    if (fd < 0) {
        perror("open error\n"); return 1;
    }

    /*打开音乐文件*/
    int fp = open("sound_card_sim/yequ10s.wav", O_RDONLY);
    if(fp < 0){
        perror("open fp error!\n"); return 1;
    }

    /*求文件的大小*/
    int len = 800180;

    char *buf = (char *)malloc(len);
    memset(buf, 0, len);

    // 读文件到buf中
    int rd = read(fp, buf, len);
    if(rd < 0){
        perror("read wav error!\n"); return 1;
    }
    close(fp);

    // 把buf写到设备文件中
    int wr = do_write(fd, buf, len);
    if(wr < 0){
        perror("write dsp error!\n"); return 1;
    }
    
    // 从设备文件中读取数据到buf
    rd = do_read(fd, buf, len);
    if (rd < 0) {
        perror("read dsp error!\n"); return 1;
    }
    do_close(fd);

    // 打开输出文件
    if (p == 0)
        fp = open("sound_card_sim/out2.wav", O_WRONLY);
    else
        fp = open("sound_card_sim/out1.wav", O_WRONLY);

    // 把buf写到输出文件里
    wr = write(fp, buf, len);
    if(wr < 0){
        perror("write out error!\n"); return 1;
    }
    close(fp);

    // thinos还没实现释放内存所以注释了
    // free(buf); buf = NULL;
    do_print("app_sound: process %d end\n", do_getpid());
    return 0;
}
